{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import random\n",
    "import argparse\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from glob import glob\n",
    "from tqdm import tqdm\n",
    "from sklearn.metrics import accuracy_score, f1_score, confusion_matrix\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "from torch import optim\n",
    "from torch.optim.lr_scheduler import ReduceLROnPlateau\n",
    "\n",
    "from config.config_run import *\n",
    "from models.AMIO import AMIO\n",
    "from data.load_data import MMDataLoader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Storage(dict):\n",
    "    \"\"\"\n",
    "    A Storage object is like a dictionary except `obj.foo` can be used inadition to `obj['foo']`\n",
    "    ref: https://blog.csdn.net/a200822146085/article/details/88430450\n",
    "    \"\"\"\n",
    "    def __getattr__(self, key):\n",
    "        try:\n",
    "            return self[key]\n",
    "        except KeyError as k:\n",
    "            raise AttributeError(k)\n",
    "\n",
    "    def __setattr__(self, key, value):\n",
    "        self[key] = value\n",
    "\n",
    "    def __delattr__(self, key):\n",
    "        try:\n",
    "            del self[key]\n",
    "        except KeyError as k:\n",
    "            raise AttributeError(k)\n",
    "\n",
    "    def __str__(self):\n",
    "        return \"<\" + self.__class__.__name__ + dict.__repr__(self) + \">\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Samples Num: 1284\n",
      "Valid Samples Num: 229\n",
      "Test Samples Num: 686\n"
     ]
    }
   ],
   "source": [
    "seed = 1111\n",
    "args = {'modelName': 'dmult', 'datasetName': 'mosi', 'num_workers': 8, 'tasks': 'M', \\\n",
    "        'data_dir': '/home/sharing/disk3/dataset/multimodal-sentiment-dataset'}\n",
    "# save_path = 'asserts' + '/' + args['modelName'] + '-%d' % seed + '.pdf'\n",
    "config = Config(args)\n",
    "args = config.get_config()\n",
    "device = torch.device('cuda: 1')\n",
    "# load model\n",
    "model_save_path = '/home/iyuge2/Project/MSA-AAAI2021/results/tmpSave/dmult-mosi-M-A-B.pth'\n",
    "model = AMIO(args)\n",
    "model.load_state_dict(torch.load(model_save_path))\n",
    "model.to(device)\n",
    "model.eval()\n",
    "# load data\n",
    "dataloader = MMDataLoader(args)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 11/11 [00:01<00:00,  7.25it/s]\n",
      "100%|██████████| 2/2 [00:00<00:00,  2.55it/s]\n",
      "100%|██████████| 6/6 [00:01<00:00,  5.47it/s]\n"
     ]
    }
   ],
   "source": [
    "feature_ts, feature_as, feature_vs, feature_fs = [], [], [], []\n",
    "new_ts, new_as, new_vs = [], [], []\n",
    "y_pred = []\n",
    "y_true = []\n",
    "with torch.no_grad():\n",
    "    for mode in ['train', 'valid', 'test']:\n",
    "        with tqdm(dataloader[mode]) as td:\n",
    "            for batch_data in td:\n",
    "                vision = batch_data['vision'].to(device)\n",
    "                audio = batch_data['audio'].to(device)\n",
    "                text = batch_data['text'].to(device)\n",
    "                labels = batch_data['labels']['M'].to(device).view(-1, 1)\n",
    "\n",
    "                outputs = model(text, audio, vision)\n",
    "                # save features and results\n",
    "                feature_ts.append(outputs['Feature_t'].cpu().detach())\n",
    "                feature_as.append(outputs['Feature_a'].cpu().detach())\n",
    "                feature_vs.append(outputs['Feature_v'].cpu().detach())\n",
    "                feature_fs.append(outputs['Feature_f'].cpu().detach())\n",
    "                \n",
    "#                 new_ts.append(outputs['New_t'].cpu().detach())\n",
    "#                 new_as.append(outputs['New_a'].cpu().detach())\n",
    "#                 new_vs.append(outputs['New_v'].cpu().detach())\n",
    "                \n",
    "                y_pred.append(outputs['M'].cpu())\n",
    "                y_true.append(labels.cpu())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "feature_T = torch.cat(feature_ts, dim=0).cpu().detach().numpy()\n",
    "feature_A = torch.cat(feature_as, dim=0).cpu().detach().numpy()\n",
    "feature_V = torch.cat(feature_vs, dim=0).cpu().detach().numpy()\n",
    "feature_F = torch.cat(feature_fs, dim=0).cpu().detach().numpy()\n",
    "# new_T = torch.cat(new_ts, dim=0).cpu().detach().numpy()\n",
    "# new_A = torch.cat(new_as, dim=0).cpu().detach().numpy()\n",
    "# new_V = torch.cat(new_vs, dim=0).cpu().detach().numpy()\n",
    "\n",
    "y_pred = torch.cat(y_pred, dim=0).view(-1).cpu().detach().numpy()\n",
    "y_pred[y_pred > 0] = 1\n",
    "y_pred[y_pred <= 0] = 0\n",
    "\n",
    "y_true = torch.cat(y_true, dim=0).view(-1).cpu().detach().numpy()\n",
    "y_true[y_true > 0] = 1\n",
    "y_true[y_true <= 0] = 0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 融合表示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "result_F = tsne.fit_transform(feature_F)\n",
    "pos = result_F[np.where(y_true==1)]\n",
    "neg = result_F[np.where(y_true==0)]\n",
    "plt.scatter(pos[:,0], pos[:,1], color='r', label='pos')\n",
    "plt.legend()\n",
    "plt.scatter(neg[:,0], neg[:,1], color='g', label='neg')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 单模态表示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from sklearn.manifold import TSNE\n",
    "plt.rcParams['font.sans-serif'] = ['Times New Roman']\n",
    "tsne = TSNE(n_components=2, init='pca', random_state=0)\n",
    "result_T = tsne.fit_transform(feature_T)\n",
    "result_A = tsne.fit_transform(feature_A)\n",
    "result_V = tsne.fit_transform(feature_V)\n",
    "att_xs = [result_T, result_A, result_V]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "colors = ['r', 'g', 'b']\n",
    "labels = ['T', 'A', 'V']\n",
    "for i in range(len(colors)): \n",
    "    plt.scatter(att_xs[i][:,0:1], att_xs[i][:,1:2], label=labels[i], c = colors[i])\n",
    "    plt.legend(loc='upper right')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "result_T = tsne.fit_transform(new_T)\n",
    "result_A = tsne.fit_transform(new_A)\n",
    "result_V = tsne.fit_transform(new_V)\n",
    "att_xs = [result_T, result_A, result_V]\n",
    "colors = ['r', 'g', 'b']\n",
    "labels = ['T', 'A', 'V']\n",
    "for i in range(len(colors)): \n",
    "    plt.scatter(att_xs[i][:,0:1], att_xs[i][:,1:2], label=labels[i], c = colors[i])\n",
    "    plt.legend(loc='upper right')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [],
   "source": [
    "def test(x, D):\n",
    "    x_shape = x.size()\n",
    "    x = x.view(-1)\n",
    "    left = x < -D\n",
    "    middle = (x >= -D) & (x <= D)\n",
    "    right = x > D\n",
    "    # x < -D\n",
    "    x[left] = (1 - torch.exp(-x[left]-D)) / (1 + torch.exp(-x[left]-D))\n",
    "    # x < D and x > -D\n",
    "    x[middle] = 0\n",
    "    # x > D\n",
    "    x[right] = (1 - torch.exp(-x[right]+D)) / (1 + torch.exp(-x[right]+D))\n",
    "    # return\n",
    "    x = x.view(x_shape)\n",
    "    return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = torch.tensor([i for i in range(-5, 5)]).float().view(-1, 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [],
   "source": [
    "x.requires_grad = True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_x = test(x, 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.requires_grad"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_x.requires_grad"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = torch.tensor([3.0, 0.0, 1.0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [],
   "source": [
    "a.requires_grad = True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [],
   "source": [
    "b = torch.where(a > 2.0, torch.tensor([0.0]), a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.requires_grad"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
